# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User


class ViewOptionsManager(models.Manager):
    """ Менеджер создания нового набора настроек отображения данных аккаунта """
    
    def create_view_options(self, user):
        """ Создать новый набор настроек """
        new_vopt = self.create(user=user, show_username=u'all', show_birthday=u'user',
                               show_email=u'user', show_about=u'user', show_works=u'all')
        return new_vopt
    
    
    

class UserRelsManager(models.Manager):
    """ Менеджер создания нового набора отношений с другими юзерами """
    
    def create_user_rels(self, user):
        """ Создать новый набор отношений """
        new_user_rels = self.create(user=user)
        return new_user_rels
    
    
    

class ViewOptions(models.Model):
    """ Настройки отображения данных аккаунта """
    
    
    SHOW_LIMIT = ((u'all', u'Всем'), (u'user', u'Пользователям'), (u'friend', u'Друзьям'), (u'nobody', u'Никому'))
    
    user = models.OneToOneField(User, related_name='vopt_user', verbose_name=u'Пользователь', primary_key=True)
    show_username = models.CharField(max_length=6, choices=SHOW_LIMIT, default=u'all', verbose_name=u'Показывать логин')
    show_birthday = models.CharField(max_length=6, choices=SHOW_LIMIT, default=u'user', verbose_name=u'Показывать День Рожденья')
    show_email = models.CharField(max_length=6, choices=SHOW_LIMIT, default=u'user', verbose_name=u'Показывать e-mail')
    show_about = models.CharField(max_length=6, choices=SHOW_LIMIT, default=u'user', verbose_name=u'Показывать информацию')
    show_works = models.CharField(max_length=6, choices=SHOW_LIMIT, default=u'all', verbose_name=u'Показывать работы')
    
    objects = ViewOptionsManager()
    
    
    class Meta:
        verbose_name = u'Настройки пользователя'
        verbose_name_plural = u'Настройки пользователей'
    
    
    def __unicode__(self):
        """ Имя поля в админке """
        return self.user.username




class UserRels(models.Model):
    """ Списки других юзеров, имеющих отношение к указанному """
    
    user = models.OneToOneField(User, related_name='urels_user', verbose_name=u'Пользователь', primary_key=True)
    friends = models.ManyToManyField(User, blank=True, null=True, verbose_name=u'Друзья', related_name='urels_friends')
    ignored = models.ManyToManyField(User, blank=True, null=True, verbose_name=u'Игнорируемые', related_name='urels_ignored')
    banned = models.ManyToManyField(User, blank=True, null=True, verbose_name=u'Забаненные', related_name='urels_banned')
    
    objects = UserRelsManager()
    
    
    class Meta:
        verbose_name = u'Отношения пользователя'
        verbose_name_plural = u'Отношения пользователей'
    
    
    def __unicode__(self):
        """ Имя поля в админке """
        return self.user.username
    
    
    @staticmethod
    def check_rels(holder, subject):
        """ Статическая функция проверки взаимоотношений между правообладателем и испытуемым,
            возвращает True, если взаимоотношения в норме, или False, если испытуемый игнорируется или
            забанен правообладателем """
        if holder.id != subject.id and \
        (len(UserRels.objects.filter(user=holder, ignored__id=subject.id)) > 0 \
        or len(UserRels.objects.filter(user=holder, banned__id=subject.id)) > 0):
            return False
        return True
        